package com.toledo.salao.agenda;

import java.util.Collection;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import com.toledo.salao.cliente.Cliente;
import com.toledo.salao.fechamento.Fechamento;
import com.toledo.salao.funcionario.Funcionario;
import com.toledo.salao.servico.Servico;

@Entity
@Table(name="agenda")
public class Agenda {
	
	@Id
	@GeneratedValue
	private Integer id_agenda;
	private Date data_agenda;
	private String valor_cobrado;
	private String hora_inicial;
	private String hora_final;
	private boolean diaTodo;
	
	
	public boolean isDiaTodo() {
		return diaTodo;
	}

	public void setDiaTodo(boolean diaTodo) {
		this.diaTodo = diaTodo;
	}

	@ManyToOne
	@JoinColumn(name ="id_cliente", referencedColumnName="id_pessoa")
	private Cliente cliente;	
	
	@ManyToOne
	@JoinColumn(name ="id_funcionario", referencedColumnName="id_pessoa")
	private Funcionario funcionario;	
	
	@ManyToMany
	/*@JoinTable(
	      name="AGENDA_SERV",
	      joinColumns={@JoinColumn(name="id_agenda", referencedColumnName="id_agenda")},
	      inverseJoinColumns={@JoinColumn(name="id_servico", referencedColumnName="id_servico")})
	*/
	@JoinColumn(name ="id_servico")
	private Collection<Servico> servicos;
	

	@ManyToOne
	@JoinColumn(name ="id_fechamento")
	private Fechamento fechamento;	
	

	/*public Collection<Servico> getServicos() {
		return servicos;
	}

	public void setServicos(Collection<Servico> servicos) {
		this.servicos = servicos;
	}*/
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result
				+ ((data_agenda == null) ? 0 : data_agenda.hashCode());
		result = prime * result + (diaTodo ? 1231 : 1237);
		result = prime * result
				+ ((fechamento == null) ? 0 : fechamento.hashCode());
		result = prime * result
				+ ((funcionario == null) ? 0 : funcionario.hashCode());
		result = prime * result
				+ ((hora_final == null) ? 0 : hora_final.hashCode());
		result = prime * result
				+ ((hora_inicial == null) ? 0 : hora_inicial.hashCode());
		result = prime * result
				+ ((id_agenda == null) ? 0 : id_agenda.hashCode());
		result = prime * result
				+ ((servicos == null) ? 0 : servicos.hashCode());
		result = prime * result
				+ ((valor_cobrado == null) ? 0 : valor_cobrado.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Agenda other = (Agenda) obj;
		if (cliente == null) {
			if (other.cliente != null)
				return false;
		} else if (!cliente.equals(other.cliente))
			return false;
		if (data_agenda == null) {
			if (other.data_agenda != null)
				return false;
		} else if (!data_agenda.equals(other.data_agenda))
			return false;
		if (diaTodo != other.diaTodo)
			return false;
		if (fechamento == null) {
			if (other.fechamento != null)
				return false;
		} else if (!fechamento.equals(other.fechamento))
			return false;
		if (funcionario == null) {
			if (other.funcionario != null)
				return false;
		} else if (!funcionario.equals(other.funcionario))
			return false;
		if (hora_final == null) {
			if (other.hora_final != null)
				return false;
		} else if (!hora_final.equals(other.hora_final))
			return false;
		if (hora_inicial == null) {
			if (other.hora_inicial != null)
				return false;
		} else if (!hora_inicial.equals(other.hora_inicial))
			return false;
		if (id_agenda == null) {
			if (other.id_agenda != null)
				return false;
		} else if (!id_agenda.equals(other.id_agenda))
			return false;
		if (servicos == null) {
			if (other.servicos != null)
				return false;
		} else if (!servicos.equals(other.servicos))
			return false;
		if (valor_cobrado == null) {
			if (other.valor_cobrado != null)
				return false;
		} else if (!valor_cobrado.equals(other.valor_cobrado))
			return false;
		return true;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

public Agenda(){
		
	}	
	
	public Agenda(Date data_agenda, String valor_cobrado, String hora_inicial, String hora_final,
			Cliente cliente, Funcionario funcionario, Collection<Servico> servicos, Fechamento fechamento ) {
		super();
		this.data_agenda = data_agenda;
		this.valor_cobrado = valor_cobrado;
		this.hora_inicial = hora_inicial;
		this.hora_final = hora_final;
		this.cliente = cliente;
		this.funcionario = funcionario;
		this.servicos = servicos;
		this.fechamento = fechamento;
	}

	public Integer getId_agenda() {
		return id_agenda;
	}

	public void setId_agenda(Integer id_agenda) {
		this.id_agenda = id_agenda;
	}

	public Date getData_agenda() {
		return data_agenda;
	}

	public void setData_agenda(Date data_agenda) {
		this.data_agenda = data_agenda;
	}

	public String getValor_cobrado() {
		return valor_cobrado;
	}


	public Collection<Servico> getServicos() {
		return servicos;
	}

	public void setServicos(Collection<Servico> servicos) {
		this.servicos = servicos;
	}

	public void setValor_cobrado(String valor_cobrado) {
		this.valor_cobrado = valor_cobrado;
	}

	public String getHora_inicial() {
		return hora_inicial;
	}

	public void setHora_inicial(String hora_inicial) {
		this.hora_inicial = hora_inicial;
	}

	public String getHora_final() {
		return hora_final;
	}

	public void setHora_final(String hora_final) {
		this.hora_final = hora_final;
	}

	public Fechamento getFechamento() {
		return fechamento;
	}

	public void setFechamento(Fechamento fechamento) {
		this.fechamento = fechamento;
	}
}